# Реализуем стек с помощью класс deque изи библиотеки collections
# В этой строке укажите кто автор. Например: Дьяконов Е.Н.
# Файл проверен и исправлен на соответствие pep8.
# Использован онлайн сервис https://www.pythonchecker.com
# Выполнил Иван Олегович Моисеев. 16.10.2023

from collections import deque


class Stack:
    def __init__(self):
        self.stack = deque() # используем колоду или двусторонняя очередь


    def pop(self):
        """
        Метод удаляющий верхний элемент. Стек изменяется.
        Метод возвращает верхний элемент стека
        """
        if len(self.stack) == 0:
            return None
        return self.stack.pop()


    def push(self, item):
        """
        Метод добавляющий элемент на вершину стека.
        Метод ничего не возвращает
        """
        self.stack.append(item)


    def isEmpty(self):
        """
        Метод проверки стека на пустоту. Должен возвращать True или False
        """
        if len(self.stack) == 0:
            return True
        elif len(self.stack) > 0:
            return False


    def peek(self):
        """
        Метод возвращает верхний элемент стека, но не удаляет его.
        Стек не меняется
        """
        if len(self.stack) == 0:
            return None
        element = self.stack[-1]
        return element


def check_stack(text):
    stack = Stack()
    for i in range(0,len(text)):
        if text[i] in "({[":
            stack.push(text[i])
        if text[i] in "})]":
            s = stack.pop()
            if (text[i]== ")" and s=="("):
                pass
            else:
                return False
                break;
    if stack.isEmpty():
        return True
    else:
        return False


print(check_stack('(((())))'))
